CC=gcc
CFLAGS= -ansi -pedantic -O3 `sdl-config --cflags`
LDFLAGS=`sdl-config --libs` -lGL -lGLU -lglut -lGLEW -lSDL_image
REP_EXEC=bin/linux
REP_RES=res
BIN=/usr/bin
EXEC=fireworks-simulation
REP_SRC=src
SRC= $(wildcard $(REP_SRC)/*.c)
OBJ= $(SRC:.c=.o)

default: all

all: $(REP_EXEC)/$(EXEC)

#On compile la cible en incluant tout les dépendances, c'est à dire tout les fichier objet.
$(REP_EXEC)/$(EXEC): $(OBJ)
	@$(CC) -o $@ $^ $(LDFLAGS)
	mv $(REP_SRC)/*.o $(REP_EXEC)
	cp $(REP_RES)/*.png $(REP_EXEC)

#On détails pour chaque fichier object ces dépendances associées. (S'il en a, bien sûr).
main.o: camera.h core.h display.h keyboard.h mouse.h

display.o: const.h graphicscore.h

keyboard.o: display.h

core.o: color.h explosion.h fire.h particle.h sound.h const.h graphicscore.h list.h

display.o: graphicscore.h const.h

fire.o: explosion.h particle.h

explosion.o: color.h particle.h

particule.o: color.h vector3.h sprite.h tiledsprite.h

graphicscore.o: opengl.h const.h camera.h cubemap.h particule.h color.h

camera.o: vector3.h

opengl.o: const.h vector3.h color.h

mouse.o: camera.h

sprite.o: vector3.h camera.h color.h

tiledsprite.o: sprite.h vector3.h color.h

cubemap.o: const.h opengl.h displaylist.h texture.h

list.o: const.h type.h

doublelinkedlist.o: const.h

dynamicarray.o: const.h type.h

grass.o: const.h color.h opengl.h texture.h sprite.h camera.h vector3.h

land.o: opengl.h texture.h grass.g camera.h displaylist.h dynamicarray.h vertexobjectbuffer.h sprite.h

type.o: const.h

#Règle pour tout les fichier object trouvé en dépendance, on leur associe le fichier .c du même nom et on execute la commande générique qui compile le .o avec les fichier .h de dépendances définie ci-dessus.
%.o: %.c
	@$(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean doc install uninstall

#Règle d'installation de l'executable
install: all clean
	cp $(REP_EXEC)/$(EXEC) $(BIN)/$(EXEC)

#Règle de désinstallation de l'executable
uninstall:
	rm $(BIN)/$(EXEC)

#Règle de génération de la documentation.
doc:
	cd src
	doxygen
	cd ../doc/html
	firefox index.html
	cd ../..

#Règle de nettoyage des fichier intermédiaire de compilation.
clean:
	rm $(REP_EXEC)/*.o
